package com.niiwoo.civet.account.service.recharge;

import com.niiwoo.civet.account.dto.common.PayChannelDTO;
import com.niiwoo.civet.account.dto.request.RechargeAccountTypeRequestDTO;
import com.niiwoo.civet.account.dto.request.RechargeDubboRequestDTO;
import com.niiwoo.civet.account.dto.request.RechargeRecordRequestDTO;
import com.niiwoo.civet.account.dto.request.UpdateRechargeRequestDTO;
import com.niiwoo.civet.account.dto.response.*;
import com.niiwoo.tripod.provider.dto.response.PageResponseDTO;
import com.niiwoo.civet.account.dto.response.RechargeStatisticsResponseDTO;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.List;

/**
 * Created by lujing on 2017/11/8.
 */
public interface RechargeDubboService {
    /**
     * 封装请求充值的参数
     * @param rechargeDubboRequestDTO
     * @return
     */
    RechargeResponseDTO structureParams(RechargeDubboRequestDTO rechargeDubboRequestDTO)throws ParseException;

    /**
     * 更新充值订单和充值金额
     * @param updateRechargeRequestDTO
     * @return
     */
    UpdateRechargeResponseDTO updateRecharge(UpdateRechargeRequestDTO updateRechargeRequestDTO);

    /**
     * 用户充值记录列表
     * @param rechargeRecordRequestDTO
     * @return
     */
    PageResponseDTO<RechargeRecordResponseDTO> rechargeRecordList(RechargeRecordRequestDTO rechargeRecordRequestDTO);

    /**
     * 根据用户userId查询账户信息（余额和账号）
     * @param userId
     * @return
     */
    List<AccountAmountDTO> queryUserAccountInfo(String userId);

    /**
     * 根据用户userId和orgId查询账户信息（余额和账号）
     *
     * @param userId
     * @param orgId
     * @return
     */
    default List<AccountAmountDTO> queryUserAccountInfoWithOrgId(String userId,String orgId){return null;}

    /**
     * 查询用户银行卡信息
     * @param userId
     * @return
     */
    UserBankInfoResponseDTO queryUserBankInfo(String userId);

    /**
     * 根据用户userId和orgId查询用户银行卡信息
     *
     * @param userId
     * @param orgId
     * @return
     */
    default UserBankInfoResponseDTO queryUserBankInfoWithOrgId(String userId,String orgId){return null;}

    /**
     * 查询处理中的订单并更新状态（不包括5分钟之内的）
     */
    void queryOrderByStatusUpdate();

    /**
     * 查询用户最新的充值成功的记录
     * @param userId
     * @return
     */
    RechargeOrderDTO userRechrageSuccRecord(String userId);

    /**
     * 根据用户userId和orgId查询用户最新的充值成功的记录
     *
     * @param userId
     * @param orgId
     * @return
     */
    default RechargeOrderDTO userRechrageSuccRecordWithOrgId(String userId,String orgId){return null;}

    /**
     * 查询用户首次充值记录
     * @param userId
     * @return
     */
    RechargeOrderDTO queryFirstRechrageSuccessRecord(String userId);

    /**
     * 平台充值
     * @param rechargeDubboRequestDTO
     * @return
     */
    RechargeResponseDTO platformRecharge(RechargeDubboRequestDTO rechargeDubboRequestDTO);

    PayChannelDTO queryPayChannelCode();

    /**
     * 查询用户累计充值成功金额
     * @param userId
     * @return
     */
    BigDecimal queryUserTotalRechrageAmount(String userId);

    /**
     * 根据用户ID和机构ID查询用户累计充值成功金额
     *
     * @param userId
     * @param orgId
     * @return
     */
    default BigDecimal queryUserTotalRechrageAmountWithOrgId(String userId,String orgId){return null;}

    /**
     * 是否支持充值
     * @param userId
     * @return
     */
    RechargeEnableResponse rechargeEnable(String userId);

    /**
     * 是否支持充值
     * @param userId
     * @return
     */
    default RechargeEnableResponse rechargeEnableWithOrgId(String userId,String orgId){return null;}

    /**
     * 查询是否有充值中的订单
     * @param accountId
     * @return
     */
    default Boolean haveRechargingOrder(Long accountId){return false;}

    default RechargeStatisticsResponseDTO statisticsCurrentRecharge(String userId,String orgId){return null;}

    /**
     * 最后充值账号类型
     * @param rechargeAccountTypeRequestDTO
     * @return
     */
    default RechargeAccountTypeDTO queryLatelyRechargeAccountType(RechargeAccountTypeRequestDTO rechargeAccountTypeRequestDTO){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 最后充值账号类型 (这个API暂时保留，你我金融与暖心借兼容，请不要再调本方法)
     * @param userId
     * @return
     */
    default RechargeAccountTypeDTO queryLatelyRechargeAccountType(String userId){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 统计用户充值金额 （这个API暂时保留，你我金融与暖心借兼容，请不要再调本方法）
     * @param userId
     * @return
     */
    default RechargeMoneyVerifyResponseDTO getStatisticsRechargeMoneyByUserId(String userId){
        throw new UnsupportedOperationException("未实现的方法");
    }
    /**
     * 统计用户充值金额
     * @param rechargeAccountTypeRequestDTO
     * @return
     */
    default RechargeMoneyVerifyResponseDTO getStatisticsRechargeMoneyByUserId(RechargeAccountTypeRequestDTO rechargeAccountTypeRequestDTO){
        throw new UnsupportedOperationException("未实现的方法");
    }

    default BankInfoRespDTO getBankInfoByOrderId(Long orderId){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 根据订单号，查询存管流水
     * 成功-修复该订单数据；
     * 失败-不处理；
     * @param orderId
     * @return
     */
    default RechargeQueryResponseDTO queryRechargeCompensation(Long orderId){
        throw new UnsupportedOperationException("未实现的方法");
    }
}
